home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / Mark Pilgrim / Brailler 0.5ß / Brailler 0.5ß.source / Shell ƒ / window layer.c < prev    next >
Encoding:
Text File  |  1994-10-30  |  7.8 KB  |  171 lines  |  [TEXT/R*ch]

  1. #include "window layer.h"
  2. #include "graphics dispatch.h"
  3.  
  4. static    WindowPtr MyNewWindowDispatch(short layer, Boolean useColor,
  5.                 ExtendedWindowPtr storage, const Rect *boundsRect, ConstStr255Param title,
  6.                 short procID, Boolean goAwayFlag, long refCon);
  7. static    void SetFrontWindowInLayer(WindowPtr newWindow, WindowPtr oldFrontWindow,
  8.                 short layer);
  9. static    WindowPtr GetFrontWindowInLayer(short layer);
  10. static    void SetWindowPrevious(WindowPtr window, WindowPtr previousWindow);
  11. static    WindowPtr GetWindowPrayer=GetWindowLayer(window);
  12.         oldFrontWindow=GetFrontWindowInLayer(layer);
  13.         if (oldFrontWindow!=window)
  14.         {
  15.             nextWindow=GetWindowNext(window);            /* might be 0L */
  16.             previousWindow=GetWindowPrevious(window);    /* guaranteed !=0L */
  17.             SetWindowNext(previousWindow, nextWindow);
  18.             if (nextWindow!=0L)
  19.                 SetWindowPrevious(nextWindow, previousWindow);
  20.             SetFrontWindowInLayer(window, oldFrontWindow, layer);
  21.         }
  22.         
  23.         if ((layer==kDocumentLayer) && ((iter=GetFrontWindowInLayer(kFloatLayer))!=0L))
  24.         {
  25.             while ((nextIter=GetWindowNext(iter))!=0L)
  26.                 iter=nextIter;
  27.             SendBehind(window, iter);
  28.         }
  29.         else
  30.         {
  31.             SelectWindow(window);
  32.         }
  33.         
  34.         if (oldFrontWindow==window)
  35.             return FALSE;
  36.         
  37.         RemoveHilitePatch();
  38.         if ((layer==kDocumentLayer) && (oldFrontWindow!=0L))
  39.         {
  40.             HiliteWindow(oldFrontWindow, FALSE);
  41.             ActivateWindow(oldFrontWindow, FALSE);
  42.         }
  43.         HiliteWindow(window, TRUE);
  44.         InstallHilitePatch();
  45.         ActivateWindow(window, TRUE);
  46.     }
  47.     else
  48.     {
  49.         SelectWindow(window);
  50.     }
  51.     
  52.     return TRUE;
  53. }
  54.  
  55. void SetFrontWindowInLayer(WindowPtr newWindow, WindowPtr oldFrontWindow,
  56.     short layer)
  57. {
  58.     if (newWindow!=0L)
  59.         SetWindowNext(newWindow, oldFrontWindow);
  60.     if (oldFrontWindow!=0L)
  61.         SetWindowPrevious(oldFrontWindow, newWindow);
  62.     if (newWindow!=0L)
  63.         SetWindowPrevious(newWindow, 0L);
  64.     gFrontWindowInLayer[layer]=newWindow;
  65. }
  66.  
  67. WindowPtr GetFrontWindowInLayer(short layer)
  68. {
  69.     return gFrontWindowInLayer[layer];
  70. }
  71.  
  72. void SetWindowPrevious(WindowPtr window, WindowPtr previousWindow)
  73. {
  74.     ((ExtendedWindowPtr)window)->previousWindow=previousWindow;
  75. }
  76.  
  77. WindowPtr GetWindowPrevious(WindowPtr window)
  78. {
  79.     return ((ExtendedWindowPtr)window)->previousWindow;
  80. }
  81.  
  82. void SetWindowNext(WindowPtr window, WindowPtr nextWindow)
  83. {
  84.     ((ExtendedWindowPtr)window)->nextWindow=nextWindow;
  85. }
  86.  
  87. WindowPtr GetWindowNext(WindowPtr window)
  88. {
  89.     return ((ExtendedWindowPtr)window)->nextWindow;
  90. }
  91.  
  92. void SetWindowLayer(WindowPtr window, short layer)
  93. {
  94.     ((ExtendedWindowPtr)window)->layer=layer;
  95. }
  96.  
  97. short GetWindowLayer(WindowPtr window)
  98. {
  99.     return ((ExtendedWindowPtr)window)->layer;
  100. }
  101.  
  102. Boolean WindowHasLayer(WindowPtr window)
  103. {
  104.     if (window==0L)
  105.         return FALSE;
  106.     else
  107.         return ((ExtendedWindowPtr)window)->magic==kMagicNumber;
  108. }
  109.  
  110. Boolean WindowIsFloat(WindowPtr window)
  111. {
  112.     if (window==0L)
  113.         return FALSE;
  114.     else
  115.         return ((ExtendedWindowPtr)window)->layer==kFloatLayer;
  116. }
  117.  
  118. WindowPtr GetFrontDocumentWindow(void)
  119. {
  120.     return GetFrontWindowInLayer(kDocumentLayer);
  121. }
  122.  
  123. WindowPtr GetIndWindowPtr(short index)
  124. {
  125.     WindowPtr        w;
  126.     short            i;
  127.     
  128.     for (i=NUM_LAYERS-1; i>=0; i--)
  129.     {
  130.         w=GetFrontWindowInLayer(i);
  131.         while ((w!=0L) && (GetWindowIndex(w)!=index))
  132.             w=GetWindowNext(w);
  133.         if (w!=0L)
  134.             return w;
  135.     }
  136.     
  137.     return 0L;
  138. }
  139.  
  140. void InstallHilitePatch(void)
  141. {
  142.     UniversalProcPtr    newAddress;
  143.     
  144.     gOldHiliteRoutine=GetToolTrapAddress(_HiliteWindow);
  145.     newAddress=(UniversalProcPtr)StripAddress(MyHiliteWindow);
  146.     SetToolTrapAddress(newAddress, (short)_HiliteWindow);
  147. }
  148.  
  149. void RemoveHilitePatch(void)
  150. {
  151.     SetToolTrapAddress(gOldHiliteRoutine, (short)_HiliteWindow);
  152. }
  153.  
  154. pascal void MyHiliteWindow(WindowPtr theWindow, Boolean fHilite)
  155. {
  156. }
  157.  
  158. void ActivateWindow(WindowPtr window, Boolean activate)
  159. {
  160.     GrafPtr            curPort;
  161.     
  162.     GetPort(&curPort);
  163.     SetPort(window);
  164.     if (activate)
  165.         ActivateWindowDispatch(GetWindowIndex(window));
  166.     else
  167.         DeactivateWindowDispatch(GetWindowIndex(window));
  168.     UpdateControls(window, window->visRgn);
  169.     SetPort(curPort);
  170. }
  171.